home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / strlibs.zip / MEMREV.ASM < prev    next >
Assembly Source File  |  1993-01-04  |  2KB  |  97 lines

  1. ;       Static Name Aliases
  2. ;
  3.         TITLE   memrev
  4. ;       NAME    memrev.C
  5.  
  6. ;   memrev(dst, src, len)
  7. ;   moves len bytes from src to dst, in REVERSE order.  NUL characters
  8. ;   receive no special treatment, they are moved like the rest.  It is
  9. ;   to strrev as memcpy is to strcpy.
  10. ;
  11. ;   Note: this function is perfectly happy to reverse a block into the
  12. ;   same place, memrev(x, x, L) will work.
  13. ;
  14. ;   It will not work for partially overlapping source and destination.
  15. ;
  16. ;   Returns a pointer to the beginning of the dst.
  17.  
  18.         .287
  19. _TEXT   SEGMENT  BYTE PUBLIC 'CODE'
  20. _TEXT   ENDS
  21. _DATA   SEGMENT  WORD PUBLIC 'DATA'
  22. _DATA   ENDS
  23. CONST   SEGMENT  WORD PUBLIC 'CONST'
  24. CONST   ENDS
  25. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  26. _BSS    ENDS
  27. DGROUP  GROUP   CONST,  _BSS,   _DATA
  28.         ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  29. EXTRN   __chkstk:NEAR
  30. _TEXT      SEGMENT
  31.         PUBLIC  _memrev
  32. _memrev PROC NEAR
  33.         push    bp
  34.         mov     bp,sp
  35.         mov     ax,8
  36.         call    __chkstk
  37.         push    di
  38.         push    si
  39.  
  40. ;       dsta = 4
  41. ;       register si = dsta
  42. ;       srca = 6
  43. ;       register di = srca
  44. ;       len = 8
  45. ;       dstz = -4
  46. ;       srcz = -6
  47. ;       result = -2
  48.  
  49.         mov     si,[bp+4]       ;dsta
  50.         mov     di,[bp+6]       ;srca
  51.         mov     [bp-2],si       ;result
  52.  
  53.         cmp     WORD PTR [bp+8],0       ;len
  54.         jle     $I16
  55.  
  56.  
  57.         mov     ax,[bp+8]       ;len
  58.         add     ax,di
  59.         mov     [bp-6],ax       ;srcz
  60.  
  61.         mov     ax,[bp+8]       ;len
  62.         add     ax,si
  63.         mov     [bp-4],ax       ;dstz
  64.  
  65.         jmp     SHORT $L20001
  66. $WC17:
  67.  
  68.         dec     WORD PTR [bp-6] ;srcz
  69.         mov     bx,[bp-6]       ;srcz
  70.         mov     cl,[bx]
  71.  
  72.         dec     WORD PTR [bp-4] ;dstz
  73.         mov     bx,[bp-4]       ;dstz
  74.         mov     al,[di]
  75.         inc     di
  76.         mov     [bx],al
  77.  
  78.         mov     [si],cl
  79.         inc     si
  80.  
  81. $L20001:
  82.         cmp     [bp-6],di       ;srcz
  83.         ja      $WC17
  84.  
  85.  
  86. $I16:
  87.         mov     ax,[bp-2]       ;result
  88.         pop     si
  89.         pop     di
  90.         mov     sp,bp
  91.         pop     bp
  92.         ret
  93.  
  94. _memrev ENDP
  95. _TEXT   ENDS
  96. END
  97.